/* 
 * File:   StackMemento.h
 * Author: Gab'z
 *
 * Created on 29 mai 2012, 10:41
 */

#ifndef CONSTANTSTACKMEMENTO_H
#define	CONSTANTSTACKMEMENTO_H

#include "Memento.h"
#include "../command/literal/Stack.h"

namespace calculator {
    class UndoableRedoableCommand;

    class StackMemento : public Memento {
        friend class Operator;
        friend class UnaryOperator;
        friend class AngularUnaryOperator;
        friend class BinaryOperator;
        friend class NaryOperator;
        friend class Clear;
        friend class Drop;
        friend class Eval;
        friend class RemoveStackCommand;
        friend class Swap;
        
    private:
        const Stack* _stack;
        StackMemento(UndoableRedoableCommand* undoableRedoableCommand,
                const Stack* stack);
        StackMemento(const StackMemento& orig);
        virtual ~StackMemento();
    };
}

#endif	/* CONSTANTSTACKMEMENTO_H */
